Conversation
Enable LoRA browsing, selection, and download-by-URL in both relay and direct cloud modes. Previously the LoRA UI was completely hidden in cloud mode and the backend had no cloud proxy for the LoRA list endpoint. Backend: add cloud proxy to GET /api/v1/lora/list, add POST /api/v1/lora/download endpoint with filename inference, extension validation, and duplicate detection. Add 5-min timeout for LoRA downloads in fal_app.py. Frontend: remove isCloudMode gates in SettingsPanel and ComplexFields, switch LoRAManager to useApi hook for cloud-aware routing, add downloadLoRAFile to api/cloudAdapter/useApi, add download URL input UI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: emranemran <emran.mah@gmail.com>
LoRAManager: use useCloudStatus hook to disable download input/button while cloud is connecting, show inline "Waiting for cloud connection..." message. Use sonner toast.promise() for download progress feedback. Backend: add response status checks in cloud proxy paths for /lora/list and /lora/download to properly surface errors instead of crashing on empty response data. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: emranemran <emran.mah@gmail.com>
03565a5 to
51eae2d
Compare
Signed-off-by: Max Holland <max@livepeer.org>
51eae2d to
22cca22
Compare
Signed-off-by: Max Holland <max@livepeer.org>
d1848b7 to
6ef02b2
Compare
IMO yes, installing LoRAs should be from the Settings. But happy to hear @yondonfu and @ryanontheinside thoughts. |
leszko
left a comment
There was a problem hiding this comment.
Looks good. Just 2 questions:
- Don't you want to move this Download into the Settings?
- How do you clean up it for the Cloud usage? I mean so that one user would not see loras from another user? Or you just use the ephemeral container storage?
| try { | ||
| const installPromise = installLoRAFile({ url }); | ||
| toast.promise(installPromise, { | ||
| loading: `Installing ${filename}...`, | ||
| success: response => response.message, | ||
| error: err => err.message || "Install failed", | ||
| }); | ||
| await installPromise; | ||
| setInstallUrl(""); | ||
| await loadAvailableLoRAs(); | ||
| } catch (error) { | ||
| setInstallError( | ||
| error instanceof Error ? error.message : "Install failed" | ||
| ); | ||
| } finally { | ||
| setIsInstalling(false); | ||
| } |
There was a problem hiding this comment.
Nit: I think you'll display the toast with error twice here.
There was a problem hiding this comment.
loadAvailableLoRAs should be here in the dependency array.
There was a problem hiding this comment.
this has moved but it's fixed now 👍
yondonfu
left a comment
There was a problem hiding this comment.
This doesn't seem to support CivitAI right now. Using the download URL for https://civitai.com/models/2383884?modelVersionId=2680702 results in an error about an invalid file extension.
Since the current LoRA user guide calls out that LoRAs can be sourced from HuggingFace and CivitAI and given that the latter is popular for LoRAs, I think we should make sure that is supported before introducing the LoRA download feature.
The linked LoRA guide contains guidance on how to programatically get the LoRA from CivitAI which might be a useful reference here. It will require a CivitAI API key which can be configured in the API Keys tab and the existing API key handling code might be specific to HuggingFace so it would just need to be tweaked a bit to handle CivitAI API keys too
Line 1352 in 1a7052f
I like this idea! |
Signed-off-by: Max Holland <max@livepeer.org>
Signed-off-by: Max Holland <max@livepeer.org>
bba1768 to
25aa7b7
Compare
Signed-off-by: Max Holland <max@livepeer.org>
@leszko The settings tab is implemented now 👍 And yes it just uses ephemeral storage which is cleaned up after every connection |
Signed-off-by: Max Holland <max@livepeer.org>
1399b75 to
4401056
Compare
Signed-off-by: Max Holland <max@livepeer.org>
Signed-off-by: Max Holland <max@livepeer.org>
Signed-off-by: Max Holland <max@livepeer.org>
Signed-off-by: Max Holland <max@livepeer.org>
Signed-off-by: Max Holland <max@livepeer.org>





Enable LoRA browsing, selection, and install-by-URL in both cloud and local modes. Previously the LoRA UI was completely hidden in cloud mode and the backend had no cloud proxy for the LoRA list endpoint.
Backend: add cloud proxy to GET /api/v1/lora, add POST /api/v1/lora endpoint with filename inference, extension validation, and duplicate detection. Add 5-min timeout for LoRA installs in fal_app.py.
Frontend: remove isCloudMode gates in SettingsPanel and ComplexFields, switch LoRAManager to useApi hook for cloud-aware routing, add installLoRAFile to api/cloudAdapter/useApi, add install URL input UI.